Новые возможности конфигуратора платформы «1С:Предприятие 8.3»(бесплатная статья по Программированию в 1С)
из цикла статей «Первые шаги в разработке на 1С»

О чем эта статья

Статья входит в цикл «Первые шаги в разработке на 1С». Она продолжает тему, затронутую в предыдущей статье, и описывает новые приёмы работы, которые появились в конфигураторе платформы «1С:Предприятие 8».

Прочитав статью, вы узнаете:

  • Что такое контекстная подсказка и как она помогает при написании программного кода?
  • Для чего нужны шаблоны текста и как их применять на практике?
  • Зачем использовать группировку строк программного кода?
  • Как выделение цветом может улучшить удобство работы с редактором кода?
  • В чем удобство нового поиска в дереве конфигурации?
  • Как быстро отобразить объекты нужной подсистемы?
  • Какие инструменты рефакторинга и отказа от модальности существуют и как ими пользоваться?

Применимость

В статье рассматривается возможности конфигуратора на примере платформы «1С:Предприятие» редакций 1C 8.3.5 – 8.3.11, поэтому вся информация актуальна.

Улучшения в конфигураторе платформы «1С:Предприятие 8.3»

При выпуске новой версии платформы «1С:Предприятие 8.3» разработчики добавили в нее несколько интересных и полезных нововведений, чтобы упростить ежедневный труд сотен разработчиков по всей стране.

Контекстная подсказка

Теперь при написании программного кода модуля в редакторе конфигуратора контекстная подсказка отображает не только допустимые в данном контексте имена переменных и процедур, но и параметры редактируемой в данный момент процедуры или функции.

Новая функциональность доступна как для встроенных процедур, так и для собственных процедур разработчика.

Подсказка со списком параметров выглядит следующим образом:

Контекстная подсказка

Для увеличения нажмите на изображение.

Параметр процедуры, который следует сейчас ввести, выделяется жирным шрифтом. Ниже под горизонтальной чертой располагается описание текущего параметра. Если он является обязательным, на этом акцентируется внимание при помощи текста в скобках.

При наличии нескольких вариантов синтаксиса встроенной процедуры в заголовке становятся доступны стрелки, предназначенные для переключения между этими вариантами.

Контекстная подсказка для параметров процедур и функций вызывается нажатием сочетания клавиш Ctrl + Shift + Пробел. Также ее можно вызвать автоматически при наборе символов “(“ и “, ”. Это поведение можно включить в диалоге параметров конфигуратора (пункт меню Сервис – Параметры, закладка Модули – Контекстная подсказка):

Автоматическая подсказка при наборе

Следующей полезной особенностью новой контекстной подсказки является возможность отображать параметры пользовательских процедур и функций.

Параметры процедур и функций в контекстной подсказке

Для увеличения нажмите на изображение.

Напомним, что существует документ “Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8”, в котором описаны рекомендации фирмы “1С” к разрабатываемому программному коду.

В частности, есть рекомендации по оформлению комментария к заголовку процедуры.

Так, секция “Параметры” описывает параметры процедуры (функции). Если их нет, секция пропускается.

Предваряется строкой “Параметры:”, затем с новой строки размещаются описания всех параметров. Описание параметра начинается с новой строки, далее следуют имя параметра, затем дефис и список типов, далее – дефис и текстовое описание параметра.

Например:

// Подготовить форму ответа на существующее письмо.
//
// Параметры:
// ВходящееПисьмо – СправочникСсылка.ВходящиеПисьма – письмо, на которое следует ответить.
// ИсходящееПисьмо – СправочникСсылка.ИсходящееПисьмо – данные формы для типа СправочникСсылка.ИсходящееПисьмо,
// расположенные в форме редактора исходящего письма.
// Текст – ФорматированныйДокумент – поле редактора текста письма, расположенное в форме
// редактора исходящего письма.
Процедура ЗаполнитьОтветНаПисьмо(ВходящееПисьмо, ИсходящееПисьмо, Текст) Экспорт

И конфигуратор анализирует комментарии, написанные по таким правилам, и использует их для отображения контекстной подсказки!

Анализ комментариев для отображения посказки в конфигураторе

Для увеличения нажмите на изображение.

Чтобы избежать ручного написания комментария по приведенному формату, в платформе предусмотрены шаблоны текста, ознакомиться с которыми можно, нажав сочетание клавиш Ctrl + Shift + T.

Шаблон с наименованием “Процедура (с заголовком)” как раз и формирует правильный комментарий.

Чтобы этот шаблон сработал, достаточно набрать в редакторе символы “Проц”, нажать Ctrl+Q и выбрать нужный шаблон из предлагаемого системой списка.

Шаблоны текста для формирования комментария

Группировка строк программного кода

Модули типовых решений на платформе “1С:Предприятие 8” достаточно объемные, содержат достаточно большое количество строк кода.

Для повышения удобства чтения и анализа программного кода были реализованы функции группировки условных и циклических операторов, а также процедур.

Платформа 8.3 предоставляет еще одну возможность – сгруппировать произвольные строки модуля в одну группу по логическому принципу, а затем свернуть ее, чтобы она занимала меньше места на экране для повышения читабельности текста.

Для выделения области текста введены две новые инструкции препроцессора #Область и #КонецОбласти.

Во время исполнения программного кода данные инструкции игнорируются. Они нужны только для обозначения сворачиваемых строк кода.

Группировка операторов и процедур

Для увеличения нажмите на изображение.

Нужно следить, чтобы группируемые области не пересекались между собой, потому что в таком случае они не будут сворачиваться на экране.

В конфигуратор добавлен шаблон текста для сокращения #Обл, который автоматически добавит в текст модуля инструкции по созданию новой области.

В диалоге параметров конфигуратора (пункт меню Сервис – Параметры, закладка Модули – Группировка) можно настроить группировку и сворачивание областей текста.

Настройка группировки строк программного кода

Выделение цветом конструкций

Теперь в редакторе текста на встроенном языке подсвечиваются цветом синтаксические конструкции, на которых в данный момент установлен курсор. Например, начало и конец процедуры (функции), условного оператора и оператора цикла:

Подсветка конструкций

Посветка конструкций в конфигураторе

Для увеличения нажмите на изображение.

Еще одним новшеством платформы является выделение цветом открывающихся и закрывающихся скобок. Это очень полезно при написании длинных выражений, когда синтаксический контроль сообщает об ошибке, и разработчику необходимо найти лишнюю или недостающую скобку.

Выделение цветом скобок

Для увеличения нажмите на изображение.

В диалоге параметров конфигуратора (пункт меню Сервис – Параметры, закладка Модули – Редактирование) можно настроить выделение цветом еще нескольких полезных конструкций.

Если выбрать параметр “Текущий идентификатор” и назначить ему цвет, отличный от цвета фона редактирования (по умолчанию – белый), то при установке курсора на какой-либо идентификатор программного кода он сам выделяется выбранным цветом, а кроме того выделяются все такие же идентификаторы, встречающиеся в модуле, и строковые константы с заключенным в кавычки этим же идентификатором:

Параметры - Текущий идентификатор

Подсветка программного кода

Для увеличения нажмите на изображение.

Также интерес представляет параметр “Выбранный идентификатор”. Если для него установлен цвет, не совпадающий с цветом фона редактирования, то при двойном щелчке мышью по идентификатору будет подсвечен и он, и все совпадающие идентификаторы в тексте модуля.

Параметры - Выбранный идентификатор

Выделение идентификаторов в тексте модуля

Для увеличения нажмите на изображение.

При выполнении поиска в тексте модуля при помощи строки поиска или после нажатия сочетания клавиш Ctrl + F найденное слово выделяется, а все такие же найденные слова подсвечиваются.

Подсветка найденных слов

Для увеличения нажмите на изображение.

Объединение ячеек табличного документа

Ранее ячейки табличного документа можно было объединить только с помощью пункта меню или соответствующей кнопки командной панели.

Теперь появилось сочетание клавиш Ctrl + M, при нажатии которого и происходит объединение ячеек табличного документа. Также операция “Объединить” доступна в контекстном меню табличного документа.

Объединение ячеек в таблице конфигуратора

Надеемся, что и в следующих релизах платформы «1С:Предприятие 8» разработчики будут уделять внимание повышению удобства работы с конфигуратором.

Новые возможности для разработчика в «1С:Предприятие 8.3.5»

Поиск в конфигураторе

Пользоваться поиском при конфигурировании приходится постоянно. Пока конфигурация содержит относительно небольшое количество объектов метаданных, можно осуществлять поиск визуально – глазами, прокручивая дерево конфигурации.

Однако типовые конфигурации достаточно объемны, и при таком подходе поиск будет занимать длительное время.

До выхода платформы 8.3.5 поиск по дереву метаданных можно было осуществить следующим образом:

  • набирать с клавиатуры название объекта, при этом система будет искать по совпадению наименования с первой буквы названия, но только в развернутых строках дерева конфигурации;
  • при помощи сочетания клавиш Ctrl+F открыть окно поиска:

Поиск объектов метаданных

Найденные объекты будут выведены в окно Результаты поиска, из которого по двойному щелчку мышью можно перейти к нужному объекту метаданных в дереве конфигурации.

В платформе 8.3.5 появилось новое поле поиска, расположенное над деревом конфигурации:

Новое поле поиска в конфигурации

Поиск выполняется по вхождению строки, анализируются свойствам объектов конфигурации Имя, Синоним и Комментарий.

Причем дерево конфигурации фильтруется “на лету”: в нем остаются только объекты, удовлетворяющие введенному фильтру.

Поиск в конфигурации

Рассмотрим, что обозначают цвета, которыми раскрашены объекты, оставшиеся в дереве после применения фильтра.

Если строка поиска была найдена, то имя такого объекта выделяется в дереве конфигурации черным цветом.

Если кроме того искомая строка присутствует в имени объекта (не в синониме, не в комментарии), то такие вхождения выделяются красным цветом.

Серым цветом выделяются объекты, сами не подходящие под введенный фильтр, но имеющие в своем составе подчиненные (дочерние) объекты, удовлетворяющие заданному фильтру.

На приведенном выше рисунке реквизит ИдентификаторПользователяИБ справочника Пользователи отображается в дереве, т.к. его синоним содержит подстроку “пост”:

Объект поиска

Допустимо вводить для поиска несколько подстрок, разделенных пробелами:

Поиск по нескольким подстрокам

Аналогичная строка поиска появилось и у окна, содержащего набор свойств выделенного объекта (палитра свойств):

Поиск в палитре свойств

Поиск в палитре свойств

Найденные свойства будут выведены общим списком, без разбивки по категориям.

Поиск будет осуществляться либо по именам свойств, либо по представлениям свойств (разница приведена на двух скриншотах выше).

Переключиться между режимами имя/представление можно с помощью команды “Отображать имена свойств” контекстного меню:

Отображать имена свойств

Такая же строка поиска была добавлена в окне выбора типа данных:

Поиск в окне Редактирование типа данных

И в окно выбора объекта метаданных (например, выбора регистра сведений, который будет использоваться в качестве графика для регистра расчета):

Поиск в окне Выбор объекта метаданных

Быстрое отображение объектов подсистемы

Для быстрого отображения объектов, входящих в одну конкретную подсистему, в контекстном меню появился новый пункт “Объекты подсистемы”:

Быстрое отображение объектов подсистемы

Напомним, как такого можно было добиться в предыдущих версиях платформы.

Нужно было открыть окно отбора по подсистемам, установить в нем галочку на требуемую подсистему, со всех остальных подсистем галочки снять:

Отбор по подсистемам в старой версии платформы

Теперь получить тот же самый результат можно быстрее. Кроме того, чаще всего используется и наиболее востребован отбор именно по одной подсистеме.

А, следовательно, это маленькое удобное новшество сэкономит время разработчика.

Быстрое отображение объектов, захваченных в хранилище

Если конфигурация подключена к хранилищу, то в командной панели над самим деревом конфигурации доступна кнопка “Захваченные объекты”:

Фильтр Захваченные объекты

Теперь фильтрация выполняется непосредственно в дереве конфигурации, не нужно открывать отдельное окно для работы с хранилищем, в нем устанавливать отборы на захваченные объекты.

Инструменты рефакторинга

Когда над конфигурацией работает группа из нескольких разработчиков, необходимо следить за понятностью кода, следованием общим стандартам.

Контролировать это постоянно не всегда возможно, поэтому периодически проводятся работы по улучшению читаемости кода, пересмотру уже реализованных фрагментов.

Такие действия именуются рефакторингом кода. Это процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы.

Кроме этого разработчикам предстоит выполнить в своих конфигурациях работу по отказу от модальности – устранению модальных вызовов.

Поэтому в конфигураторе платформы 8.3.5 появились механизмы рефакторинга кода и инструменты работы с модальными вызовами.

Они доступны в контекстном меню текстового редактора конфигуратора в отдельном меню Рефакторинг.

Рефакторинг кода

Для увеличения нажмите на изображение.

Рассмотрим подробнее реализованные инструменты рефакторинга.

1. Выделить фрагмент

Эта команда преобразует выделенный участок кода в отдельную процедуру или функцию.

Если процедура, внутри которой расположен выделенный участок, содержит директиву компиляции (&НаКлиенте, &НаСервере и т.д.), то создаваемая процедура или функция будет иметь такую же директиву компиляции.

Если выделенный участок кода может быть расположен в правой части оператора присваивания, то будет создаваться функция. Рассмотрим пример. Пусть есть фрагмент кода:

&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
Стр = Элементы.Товары.ТекущиеДанные;
Стр.Цена = ПолучитьЦенуТовара(Объект.Дата, Стр.Товар);
Стр.Сумма = Стр.Количество * Стр.Цена;
КонецПроцедуры

Если применить команду “Выделить фрагмент” к выделенному участку кода, система сформирует следующий программный код (создаст новую функцию):

&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
Стр = Элементы.Товары.ТекущиеДанные;
Стр.Цена = ПолучитьЦенуТовара(Объект.Дата, Стр.Товар);
Стр.Сумма = РассчитатьСумму(Стр);
КонецПроцедуры
&НаКлиенте
Функция РассчитатьСумму(Знач Стр)
Возврат Стр.Количество * Стр.Цена;
КонецФункции

Также функция будет создана, если в выделенном участке кода происходит присваивание одной переменной, которая используется ниже по коду. Например:

&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
Стр = Элементы.Товары.ТекущиеДанные;
Стр.Сумма = Стр.Количество * Стр.Цена;
КонецПроцедуры

Выделенный участок будет преобразован следующим образом:

&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
Стр = ТекущаяСтрокаТоваров();
Стр.Сумма = Стр.Количество * Стр.Цена;
КонецПроцедуры
&НаКлиенте
Функция ТекущаяСтрокаТоваров()
Перем Стр;
Стр = Элементы.Товары.ТекущиеДанные
Возврат Стр;
КонецФункции
2. Переименовать

Эта команда позволяет изменить имя переменной или процедуры (функции) во всех местах, где они фактически используются.

Если все вхождения переменной или метода определены однозначно, то система предложит указать новое имя и выполнит замену везде, где встречается этот идентификатор.

Если же все использования переменной или метода не могут быть идентифицированы однозначно, то система отображает вопрос и выводит места вхождения:

Изменить имя переменной или функции

Рассмотрим ситуацию, когда система не сможет автоматически заменить имя процедуры.

Пусть в модуле документа существует процедура:

Процедура Пересчитать() Экспорт
Для каждого ТекСтрокаТовары Из Товары Цикл
ТекСтрокаТовары.Сумма = ТекСтрокаТовары.Количество * ТекСтрокаТовары.Цена;
КонецЦикла;
КонецПроцедуры

А в модуле формы этого документа – следующий обработчик:

&НаСервере
Процедура ПересчитатьНаСервере()
Документ = РеквизитФормыВЗначение(“Объект”);
Документ.Пересчитать();
ЗначениеВРеквизитФормы(Документ, “Объект”);
//дальнейшая обработка…

КонецПроцедуры

Пиктограмма с красным восклицательным знаком в окне результатов поиска означает, что однозначно и точно определить использование в строке кода процедуры Пересчитать() системе не удалось.

Это связано с тем, что система не может автоматически определить тип переменной Документ после выполнения функции РеквизитФормыВЗначение().

Механизм контекстной подсказки в этом случае также не предлагает возможные варианты при нажатии точки после переменной Документ либо при нажатии сочетания клавиш Ctrl+Пробел.

Результаты поиска

Для увеличения нажмите на изображение.

Переименование процедуры в модуле формы при помощи команды рефакторинга также приводит к замене ссылки на обработчик в свойствах элементов формы и командах.

3. Создать описание функции

Команда создает перед процедурой или функцией комментарий, который будет корректно восприниматься механизмом контекстной подсказки.

// Процедура – Заполнить письмо по шаблону
//
// Параметры:
// ИсходящееПисьмо – –
// Текст – –
Процедура ЗаполнитьПисьмоПоШаблону(ИсходящееПисьмо, Текст) Экспорт
//…
КонецПроцедуры

Система создает заготовку комментария, в который необходимо вставить типы параметров и пояснения.

Тогда можно будет при написании кода воспользоваться расширенной подсказкой.

Расширенная подсказка в написании кода

4. Создать обработку оповещения

Эта команда становится доступной в контекстном меню, когда курсор установлен на имени метода, после которого следует открывающаяся скобка.

Причем это такие методы, как ПоказатьВопрос(), ПоказатьПредупреждение(), ПоказатьВводЧисла() и прочие блокирующие аналоги модальных методов.

Рассмотрим пример. Начнем писать клиентский обработчик команды, установим курсор на встречающийся метод ПоказатьВопрос(), вызовем команду “Создать обработчик оповещения”:

&НаКлиенте
Процедура ЗаполнитьМатериалы(Команда)
ПоказатьВопрос(
КонецПроцедуры
В результате система сформирует следующий программный код:
&НаКлиенте
Процедура ЗаполнитьМатериалы(Команда)
ПоказатьВопрос(Новый ОписаниеОповещения(“ЗаполнитьМатериалыЗавершение”, ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьМатериалыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
КонецПроцедуры
5. Преобразовать модальный вызов

Эта команда преобразует выделенный фрагмент кода, содержащий модальный метод, с использованием его асинхронного аналога. Рассмотрим несколько примеров.

Преобразуем вызов метода Предупреждение():

&НаКлиенте
Процедура НовыйОбработчик()
А = 1;
Предупреждение(“Текст”);
А = 2;
КонецПроцедуры // НовыйОбработчик()

После применения указанной команды программный код примет следующий вид:

&НаКлиенте
Процедура НовыйОбработчик()
А = 1;
ПоказатьПредупреждение(Новый ОписаниеОповещения(“НовыйОбработчикЗавершение”, ЭтотОбъект),
“Текст”);
КонецПроцедуры
&НаКлиенте
Процедура НовыйОбработчикЗавершение(ДополнительныеПараметры) Экспорт
А = 2;
КонецПроцедуры

Усложним пример. Рассмотрим использование модальной функции и условного оператора:

&НаКлиенте
Процедура НовыйОбработчик()
Ответ = Вопрос(“Табличная часть будет очищена. Продолжить?”,
РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
//алгоритм заполнения
КонецЕсли;
КонецПроцедуры

После преобразования модального вызова получаем:

&НаКлиенте
Процедура НовыйОбработчик()
Ответ = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения(“НовыйОбработчикЗавершение”, ЭтотОбъект),
“Табличная часть будет очищена. Продолжить?”, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура НовыйОбработчикЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Да Тогда
//алгоритм заполнения
КонецЕсли;
КонецПроцедуры

Следует подчеркнуть в получившемся фрагменте инициализацию переменной Ответ.

6. Преобразовать в асинхронную процедуру

В рассмотренных выше примерах преобразованию подвергались методы, имеющие свои асинхронные аналоги. Например, Вопрос() и ПоказатьВопрос(), Предупреждение() и ПоказатьПредупреждение().

Однако если модальный вызов расположен внутри процедуры, которая в свою очередь располагается внутри еще одной процедуры, то в таком случае весь вызов процедуры с модальным методом внутри будет модальным.

А значит, его надо заменить на “асинхронный аналог”, только не тот, который существует во встроенном языке, а на наш собственный, разработанный метод.

Для этого и предназначена еще одна команда подменю “Рефакторинг” – “Преобразовать в асинхронную процедуру”. Поясним на примере процедуры, вызывающей другую процедуру с модальной функцией внутри:

&НаКлиенте
Процедура НовыйОбработчик()
А = 1;
ВложеннаяПроцедура();
А = 2;
КонецПроцедуры

&НаКлиенте
Процедура ВложеннаяПроцедура()
Предупреждение(“Текст”);
КонецПроцедуры

Устанавливаем курсор на объявление процедуры ВложеннаяПроцедура(), выполняем преобразование в асинхронную процедуру. Система строит нам следующий код:

&НаКлиенте
Процедура НовыйОбработчик(Знач Оповещение)
А = 1;
ВложеннаяПроцедура(Новый ОписаниеОповещения(“НовыйОбработчикЗавершение”,
ЭтотОбъект, Новый Структура(“Оповещение”, Оповещение)));
КонецПроцедуры

&НаКлиенте
Процедура НовыйОбработчикЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
А = 2;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ВложеннаяПроцедура(Знач Оповещение)
Предупреждение(“Текст”);
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры

Обратите внимание на добавленный системой метод ВыполнитьОбработкуОповещения(), который используется в реализации процедур, которые внутри себя могут открывать блокирующие окна, но при этом должны вернуть свой результат в вызывающие процедуры.

Следует помнить, что непосредственной задачей преобразования в асинхронную процедуру является преобразование последовательности вызовов выбранной процедуры к асинхронному виду, однако вызовы, расположенные в самой этой процедуре, не изменяются.

Именно поэтому метод Предупреждение() не подвергся замене. Это нужно сделать после преобразования в асинхронную процедуру, вызвав отдельно команду “Преобразовать модальный вызов”.

Если в исходном фрагменте кода на строке, содержащей Предупреждение(), выполнить команду “Преобразовать модальный вызов”, то система спросит:

Преобразование в асинхронную процедуру

Результат получится следующий:

&НаКлиенте
Процедура НовыйОбработчик(Знач Оповещение)
А = 1;
ВложеннаяПроцедура(Новый ОписаниеОповещения(“НовыйОбработчикЗавершение”,
ЭтотОбъект, Новый Структура(“Оповещение”, Оповещение)));
КонецПроцедуры

&НаКлиенте
Процедура НовыйОбработчикЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
А = 2;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ВложеннаяПроцедура(Знач Оповещение)
ПоказатьПредупреждение(Новый ОписаниеОповещения(“ВложеннаяПроцедураЗавершение”,
ЭтотОбъект, Новый Структура(“Оповещение”, Оповещение)), “Текст”);
КонецПроцедуры
&НаКлиенте
Процедура ВложеннаяПроцедураЗавершение(ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры

7. Выделить в асинхронную процедуру

Эта команда преобразует выделенный участок кода в процедуру или функцию, преобразуя при этом выделяемый метод к асинхронному виду.

В отличие от предыдущего пункта данная команда является “составной”: сначала выделенный участок кода переносится в новую процедуру, имя которой пользователь вводит в диалоговом окне.

Затем выполняются действия, аналогичные тому, если бы пользователь щелкнул на заголовке только что созданной процедуры правой кнопкой мыши, а затем нажал “Преобразовать в асинхронную процедуру”.

8. Найти модальные вызовы модуля

Описанные выше команды работают с отдельным методом или выделенным участком кода.

Были реализованы процедуры, обрабатывающие модуль целиком, например, поиск модальных вызовов внутри всего модуля.

Найденные строки кода будут выведены в окно с результатами поиска:

Поиск модальных вызовов внутри модуля

Для увеличения нажмите на изображение.

9. Преобразовать модальные вызовы модуля

Эта команда выполняет преобразования в открытом модуле, но только тех вызовов, которые не требуют участия разработчика.

Также в главном меню расположена команда (Конфигурация – Рефакторинг – Анализировать модальные вызовы конфигурации).

Анализ модальных вызовов конфигурации

Она также выполняет поиск модальных вызовов, только в рамках всей конфигурации целиком, проверяет, можно ли преобразовать модальные вызовы автоматически.

Преобразование модальных вызовов

Анализ модальных вызовов конфигурации

Для увеличения нажмите на изображение.

Заключение

В заключение в хронологическом порядке коротко отметим, какими еще дополнительными полезными возможностями обзавелся конфигуратор:

  • Появились списки закладок в текстах модулей, которые возможно сохранить между сеансами работы (8.3.6+)
  • В случае динамического обновления отпала необходимость перезапускать конфигуратор при работе в клиент-серверном варианте работы информационной базы (8.3.7+)
  • Реализована возможность разработки конфигураций под ОС OS X 10.8 и выше (8.3.7+). Теперь в этой операционной системе доступен и конфигуратор, и клиентское приложение (толстый и тонкий клиенты)
  • Существенно расширены операции, которые могут быть выполнены в пакетном режиме (8.3.8+). За счет этого существенно упрощен процесс автоматизированного обновления конфигурации
  • Реализована утилита административной консоли, при помощи которой стало возможно исправлять часть проблем, возникающих с информационной базой без запуска конфигуратора (8.3.8+)
  • Добавлен функционал проверки проблем подключения расширения к конфигурации. Ранее такого функционала не было, и диагностика выводилась в окно сообщений при подключении расширения (8.3.9+)
  • Реализована поддержка 64-разрядного конфигуратора. Такая возможность позволила устранить проблемы нехватки памяти для операций сравнения и объединения при обновлении конфигурации и прочих ресурсоемких операций (8.3.9+)
  • Существенно ускорено первое открытие управляемой форме в конфигураторе (8.3.9+)
  • Появилась возможность частичной выгрузки редактируемой конфигурации в файлы XML. Теперь можно выгружать только те объекты, которые изменялись с момента последней выгрузки. Это существенно ускорило процесс выгрузки в файлы XML, в случае когда изменения вносятся в большие конфигурации (8.3.10+)
  • Улучшены возможности объединения модулей за счет учета расположения методов в областях, заданных инструкциями препроцессора (8.3.10+)
  • Повышена скорость работы часто используемых операций при разработке (8.3.11).

Кроме того, разработчики платформы из релиза в релиз улучшают производительность и эргономичность конфигуратора, поэтому рекомендуем вам, при возможности вести разработку на платформе актуальных релизов.

Итак, идем дальше – в следующей статье мы вернемся к программированию и разберем понятие контекста программного кода.

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.


Статья по программированию - в PDF-формате

Статья в PDF-формате

Вы можете скачать эту статью в формате PDF по следующей ссылке: Курсы-по-1С.рф – Новые возможности конфигуратора платформы 1С:Предприятие 8.3.pdf

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

Комментарии / обсуждение (25):

  1. Юрий

    Добрый день!
    Всегда читаю статьи с Вашего сайте. Очень много полезного! СПАСИБО!
    Теперь про рефакторинг. Статью скачал. Хорошо, что так подробно описано. Перечитал раза 3. Буду перечитывать и перечитывать ещё, пока не пойму смысла рефакторинга. Всё, что я понял от идеи: взять коды, написанные ранее “программистами”, которые не имели основ нормального программирования, и переделать их в “читабельный” вид. Про оптимизацию просто не говорим??? Если нормально читаемый код с 2 строк (Если НЕ Каталог.Существует() Тогда Каталог.Создать()) преобразуется в кучу процедур с “НачатьПроверкуСуществования…”, “ОписаниемОповещения…” и т.п., с передачей ДополнительныхПараметров между друг-другом – это всегда было в корне не оптимально. Какое смысловое пояснение или прояснние даёт “НачатьПроверкуСуществования…” в разрезе существования каталога? В старые времена за это просто увольняли. Первое знакомство с понятием рефакторинга ну и преобразования синхронных функций в асинхронные произвело лично на меня сильно удручающее впечатление. Читал также статью http://v8.1c.ru/o7/201312ref/index.htm
    Вывод:
    1. Если требуется читабельность кода – нужны НОРМАЛЬНЫЕ программисты, которые и напишут оптимальный по скорости алгоритм. Красота кода не всегда, а, как правило, НИКОГДА, не идет рядом с оптимальностью работы системы в целом. Забываем поговорку “Время – деньги”;
    2. Если будет реализован в ядре нормальный оптимизатор кода, то программисту этим и не надо заморачиваться;
    3. Если для решения одних и тех-же задач, которые работают в 1с77 и 1с83 время решения разнится в 20-30(!) раз, то про оптимизацию кода действительно пора задумываться.

    Если я что-то не совсем правильно понял – направьте на путь истинный пожалуйста. Готов дома читать и читать.

    • Василий Ханевич

      Добрый день!
      Процедура НачатьПроверкуСуществования(ОписаниеОповещения) и многие подобные, начинающиеся со слова Начать, появились в платформе для того, чтобы обеспечить работу прикладных решений на мобильных устройствах. Так, например, модальные окна не поддерживаются на iPad. А при работе веб-клиента через браузер модальные окна открываются как всплывающие, которые блокируют весь интерфейс браузера, включая остальные открытые окна и вкладки. Поэтому в платформе были приняты меры по обеспечению работоспособности на всех устройствах, тогда и появился “отказ от модальности”.
      Безусловно, программный код усложнился. Для облегчения разработки были реализованы некоторые инструменты рефакторинга.
      Подробнее про отказ от модальности и новые функции можно прочитать в нашей статье.

  2. Grigoriy

    Очень интересно! Шикарный обзор материалов. Спасибо авторам!!

    Отдельный привет Евгению от Новосибирска, люди ИнфоСофта Вас помнят и ценят… Удачи в работе

      • Grigoriy

        Вопрос в порядке бреда =) А нет в планах заехать в гости? Или провести интересный и захватывающий тренинг/семинар?

  3. Klukva

    Добрый день. Честно сказать для меня данный материал был абсолютно новым (в том числе и асинхронные процедуры). Попытался реализовать приведенный выше код. Создал внешнюю обработку с таким кодом в модуле формы:
    Процедура ПриЗакрытии(Знач Оповещение)
    А = 1;

    ВложеннаяПроцедура(Новый ОписаниеОповещения(“НовыйОбработчикЗавершение”,

    ЭтотОбъект, Новый Структура(“Оповещение”, Оповещение)));
    КонецПроцедуры

    &НаКлиенте
    Процедура НовыйОбработчикЗавершение(Результат, ДополнительныеПараметры) Экспорт

    Оповещение = ДополнительныеПараметры.Оповещение;

    А = 2;

    ВыполнитьОбработкуОповещения(Оповещение);

    КонецПроцедуры

    &НаКлиенте
    Процедура ВложеннаяПроцедура(Знач Оповещение)

    ПоказатьПредупреждение(Новый ОписаниеОповещения(“ВложеннаяПроцедураЗавершение”,

    ЭтотОбъект, Новый Структура(“Оповещение”, Оповещение)), “Текст”);

    КонецПроцедуры

    &НаКлиенте
    Процедура ВложеннаяПроцедураЗавершение(ДополнительныеПараметры) Экспорт

    Оповещение = ДополнительныеПараметры.Оповещение;

    ВыполнитьОбработкуОповещения(Оповещение);

    КонецПроцедуры

    При закрытии формы выдает ошибку: “Несоответствие типов параметр номер 1”, т.к. в процедуре ПриЗакрытии(Знач Оповещение) параметр Оповещение никак не инициализирован. Подскажите пожалуйста как нужно инициализировать данный параметр?

    • hanv

      Система при рефакторинге не знает, что в методе ПриЗакрытии() не нужны параметры, потому что это обработчик события формы. Поэтому эту ситуацию мы обойдем так – сделаем еще один уровень вложенности процедур. Получится что-то вроде следующего кода:

      &НаКлиенте
      Процедура ПриЗакрытии()
          ПриЗакрытии_Вложенная(Неопределено);
      КонецПроцедуры

      &НаКлиенте
      Процедура ПриЗакрытии_Вложенная(Знач Оповещение)
          А = 1;
          ВложеннаяПроцедура(Новый ОписаниеОповещения("НовыйОбработчикЗавершение",
          ЭтотОбъект, Новый Структура("Оповещение", Оповещение)));
      КонецПроцедуры
      • Klukva

        Спасибо за ответ. Но проблема не в том, что в процедуре ПриЗакрытии() указали параметр, а в том, что этот параметр как раз = Неопределено, и при вызове строки ВыполнитьОбработкуОповещения(Оповещение) в НовыйОбработчикЗавершение(…) выдается ошибка.

        • hanv

          Еще раз проверил на платформе 8.3.5. Вставил указанный код в модуль формы внешней обработки, привязал процедуру к закрытию формы, ошибки не возникло.
          Проверьте, пожалуйста, под какой платформой Вы запускаете обработку. Было замечено непонятное поведение функции ВыполнитьОбработкуОповещения() на платформе 8.3.4.408. Проверьте, пожалуйста, на последних версиях платформы.

  4. LexSeIch

    Мир Вашему дому!
    Спасибо за очередной интересный материал. Ваш сайт для меня – “Ресурс №1” по 1С. Удачи и процветания Вашей команде!

    • Евгений Гилев (Мастер-тренер)

      Прежде всего в наших статьях мы стараемся выдавать материал более структурированным, с большим количеством примеров применения тех или иных механизмов.

      Например, сравнивая нашу статью с зазеркальем, сходу видны ключевые отличия.

      Часть первая – Поиск и удобства работы:
      1) Подробнее описаны классические способы поиска (ввод начальных символов, Ctrl+F, скриншот)
      2) Акцентировано выделение цветом при нахождении подстроки не в имени, а в комментарии
      3) Команда “Отображать имена свойств” -> Поиск будет осуществляться либо по именам свойств, либо по представлениям (показана разница на скриншоте)
      4) Сравнение классического отбора по подсистеме (как такого можно было добиться в предыдущих версиях платформы) с новой командой “Объекты подсистемы”

      Часть вторая – Рефакторинг:
      1) Детальное описание назначения
      2) Порядок изложения тезисов соответствует порядку пунктов в меню
      3) В нашей статье акцентировано, что если процедура, внутри которой расположен выделенный участок, содержит директиву компиляции (&НаКлиенте, &НаСервере и т.д.), то создаваемая процедура или функция будет иметь такую же директиву компиляции.
      4) В нашей статье выделено, что если выделенный участок кода может быть расположен в правой части оператора присваивания, то будет создаваться функция.
      5) Обнаружено и описано в статье, что переименование процедуры в модуле формы при помощи команды рефакторинга также приводит к замене ссылки на обработчик в свойствах элементов формы и командах. Мелочь, а важно:)

      Как-то так :)

  5. Ruslan Abiev

    По моему это уже перебор! Так часто облегчают жизнь разработчику, что если быть в курсе всех удобных новшеств, то работать времени не остается.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.